import { defineAsyncComponent } from 'vue'
const registerComponents = (app) => {
  // 定义一个名为 registerComponents 的箭头函数，它接收一个参数 app，这个 app 通常是 Vue 应用实例，用于注册组件
  const componentFiles = import.meta.glob('./*/*.vue')
  // 使用 import.meta.glob 方法动态导入 libs 目录下所有子目录中的 .vue 文件
  // 该方法返回一个对象，键是文件路径，值是对应的导入函数
  for (const [path, importComponent] of Object.entries(componentFiles)) {
    // 遍历 componentFiles 对象的键值对
    // path 是文件路径，importComponent 是对应的导入函数
    const componentName = path.split('/').at(-2)
    // 从文件路径中提取组件名
    // 通过 split('/') 方法将路径分割成数组，然后使用 at(-2) 方法获取倒数第二个元素，即组件所在的文件夹名
    app.component(componentName, defineAsyncComponent(importComponent))
    // 使用 app.component 方法将组件注册到 Vue 应用中
    // 第一个参数是组件名，第二个参数是使用 defineAsyncComponent 包装的异步组件导入函数
  }
}

export default {
  install: registerComponents
}
// 导出一个默认对象，该对象包含一个 install 方法，值为 registerComponents 函数
// 这种方式符合 Vue 插件的安装规范，在使用 Vue 应用时可以通过 app.use() 方法来安装这个插件
